package com.torresquintero.oncologos.common.entityUtilities;

import java.util.List;

import javax.persistence.EntityManager;

import com.torresquintero.oncologos.common.factory.FactoryEntityManager;
import com.torresquintero.oncologos.entidades.Articulo;

/**
 * Clase que implementa las consultas basicas sobre un medico 
 * que se efectuan en toda la aplicacion.
 * @author Camilo Andres
 *
 */
@SuppressWarnings("unchecked")
public class ArticuloUtilities {

	
	/**
	 * Variable statica para el partron Singleton
	 */
	private static ArticuloUtilities articuloUtilities;
	/**
	 * Administrador de entidades.
	 */
	private static EntityManager em;
	
	
	/**
	 * Constructor, inicializa el EntityManager.
	 */
	private ArticuloUtilities() {
		
		em=FactoryEntityManager.getEm();
	}
	
	/**
	 * Metodo para obtener una instancia singleton de esta clase.
	 * @return
	 */
	public static ArticuloUtilities getInstance(){
		
		if(articuloUtilities==null){
			articuloUtilities=new ArticuloUtilities();
		}
		return articuloUtilities;
	}
	
	
	/**
	 * Metodo para buscar un articulo.
	 * @param Codigo del articulo.
	 * @return el articulo.
	 */
	public static  Articulo buscarArticulo(String codigo){
	em=FactoryEntityManager.getEm();	
            List<Articulo> arts= em.createNamedQuery(Articulo.FIND_ARTICULO_BY_CODIGO)
				.setParameter(Articulo.PARAMETRO_CODIGO, codigo).getResultList();
            
            if(arts.isEmpty()==false){
                return arts.get(0);
            }else{
                return null;
            }
	}
	/**
	 * MEtodo para listar todos los Articulo.
	 * @return lista de articulos.
	 */
	public static List<Articulo> listarTodosLosArticulos(){
           em=FactoryEntityManager.getEm();
		return em.createNamedQuery(Articulo.FIND_ALL).getResultList();
	}
	
	/**
	 * MEtodo para listar todos los Articulo que posean un nombre similar al
	 * parametro, usar like.
	 * @param nombre 
	 * @return lista de medicos.
	 */
	public static List<Articulo> listarArticulosPorNombre(String nombre){
           em=FactoryEntityManager.getEm();
		return em.createNamedQuery(Articulo.FIND_ARTICULO_BY_NOMBRE)
				.setParameter(Articulo.PARAMENTRO_NOMBRE, "%" + nombre + "%").getResultList();
	}
	
}
